001 /* EVolve - an Extensible Software Visualization Framework
002 * Copyright (C) 2001-2002 Qin Wang
003 *
004 * This library is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU Library General Public
006 * License as published by the Free Software Foundation; either
007 * version 2 of the License, or (at your option) any later version.
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Library General Public License for more details.
013 *
014 * You should have received a copy of the GNU Library General Public
015 * License along with this library; if not, write to the
016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017 * Boston, MA 02111-1307, USA.
018 */
019
020 /*
021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/
022 */
023
024 package EVolve;
025
026 import EVolve.data.*;
027 import EVolve.visualization.*;
028 import EVolve.visualization.VizFactory.VisualizationFactory;
029 import EVolve.util.*;
030 import EVolve.util.settings.SceneSetting;
031 import EVolve.exceptions.DataProcessingException;
032 import EVolve.exceptions.CancelLoadDataException;
033 import EVolve.exceptions.EVolveException;
034
035 import java.awt.*;
036 import java.util.*;
037 import java.net.URL;
038 import javax.swing.*;
039
040 public class Scene {
041 public static final String VERSION = "EVolve 1.2.3";
042 private static Scene e;
043
044 private DataSourceManager dsm;
045 private DataManager dm;
046 private VisualizationManager vm;
047 private UIManager um;
048 private ToolsManager tm;
049 private Filter filter;
050 private String autoDataFilename;
051 private String currentDataFilename;
052 private boolean dataLoaded;
053
054 private Scene() {
055 }
056
057 public static void start(ArrayList dsList, VisualizationFactory[] factory) {
058 e = new Scene();
059
060 e.vm = new VisualizationManager(factory);
061 e.dsm = new DataSourceManager(dsList);
062 e.um = new UIManager();
063 e.tm = new ToolsManager();
064
065 e.autoDataFilename = null;
066 e.currentDataFilename = "nothing loaded yet..";
067
068 e.dsm.init();
069 e.vm.init();
070 e.um.init();
071 SceneSetting.v().readDataFromFile();
072 }
073
074 public static DataManager getDataManager() {
075 return e.dm;
076 }
077
078 public static VisualizationManager getVisualizationManager() {
079 return e.vm;
080 }
081
082 public static DataSourceManager getDataSourceManager() {
083 return e.dsm;
084 }
085
086 public static UIManager getUIManager() {
087 return e.um;
088 }
089
090 public static ToolsManager getToolsManager() {
091 return e.tm;
092 }
093
094 public static Filter getFilter() {
095 return e.filter;
096 }
097
098 public static JFrame getFrame() {
099 return e.um.getFrame();
100 }
101
102 public static void setStatus(String status) {
103 e.um.setStatus(status);
104 }
105
106 public static int getColorRGB() {
107 return e.dm.getColorRGB();
108 }
109
110 public static Color getColor() {
111 return e.dm.getColor();
112 }
113
114 public static long getEventCounter() {
115 return e.dm.getEventCounter();
116 }
117
118 public static void loadDataSource() {
119 setStatus("Loading data, please wait.");
120 e.dataLoaded = e.dm.isDataLoaded();
121 Thread thread = new Thread() {
122 public void run() {
123 try {
124 e.um.disableFileMenus();
125 e.um.disableFunctionMenus();
126 e.dm.init();
127 e.um.init();
128 e.vm.init();
129 setStatus("Data loaded.");
130 e.dm.setDataLoaded(true);
131 e.um.updateDatasourceCombo();
132 e.um.enableFileMenus();
133 e.um.enableMenu();
134 } catch (CancelLoadDataException exp) {
135 e.dm.setDataLoaded(e.dataLoaded);
136 if (e.dataLoaded) {
137 e.um.updateDatasourceCombo();
138 e.um.enableMenu();
139 }
140 e.um.enableFileMenus();
141 } catch (DataProcessingException exp) {
142 e.dm.setDataLoaded(false);
143 e.um.enableFileMenus();
144 setStatus(exp.getMessage());
145 } catch (EVolveException exp) {
146 e.dm.setDataLoaded(false);
147 setStatus(exp.getMessage());//"Invalid data format!");
148 e.um.enableFileMenus();
149 }
150 }
151 };
152 thread.start();
153 }
154
155 public static void autoLoadDataSource() {
156 setStatus("Loading data, please wait.");
157 e.filter = new Filter();
158 try {
159 e.um.disableFileMenus();
160 e.vm.init();
161 e.um.init();
162 e.dm.init();
163 setStatus("Data loaded.");
164 e.dm.setDataLoaded(true);
165 e.um.updateDatasourceCombo();
166 e.um.enableFileMenus();
167 e.um.enableMenu();
168 } catch (DataProcessingException exp) {
169 e.um.enableFileMenus();
170 e.dm.setDataLoaded(false);
171 setStatus(exp.getMessage());
172 } catch (Exception e) {}
173 }
174
175 public static void visualize() {
176 setStatus("Processing data, please wait.");
177
178 ProcessingThread thread = new ProcessingThread();
179 ProgressIndicator progress = new ProgressIndicator(getFrame(),e.dm, thread);
180
181 thread.start();
182 }
183
184 public static void autoVisualize() {
185 setStatus("Processing data, please wait.");
186
187 try {
188 e.dm.sendEvents();
189 e.vm.visualize();
190 setStatus("Visualization finished.");
191 } catch (DataProcessingException e) {
192 setStatus(e.getMessage());
193 }
194 }
195
196 public static String getDataFileName() {
197 return e.autoDataFilename;
198 }
199
200 public static void setDataFilename(String filename) {
201 e.autoDataFilename = filename;
202 if (filename!=null) e.currentDataFilename = filename;
203 }
204
205 public static void clearFilters() {
206 e.filter = new Filter();
207 }
208
209 public static void showErrorMessage(String msg) {
210 JOptionPane.showMessageDialog(e.um.getDesktop(),msg,"Error Message",JOptionPane.ERROR_MESSAGE);
211 }
212
213 public static void setCurrentDataFilename(String filename) {
214 e.currentDataFilename = filename;
215 }
216
217 public static String getCurrentDataFilename() {
218 return e.currentDataFilename;
219 }
220
221 public static void selectDataSource(DataManager dm, Filter filter) {
222 e.dm = dm;
223 e.filter = filter;
224 }
225
226 public static URL getGifURL(String filename) {
227 return e.getClass().getResource("img/"+filename);
228 }
229 }